import axios from 'axios';
import store from '@/store'; // 导入Vuex store
import router from '@/router'; // 导入路由器
import { ElMessage } from 'element-plus';

const API_URL = '/api';

/**
 * 管理员服务类
 * 处理所有与管理员相关的API请求
 */
class AdminService {
  /**
   * 检查并获取认证令牌
   * @returns {Object} 包含认证令牌的请求头对象
   */
  getAuthHeaders() {
    // 首先尝试从store获取Token
    let token = store.getters['auth/token'];
    
    // 如果store中没有，尝试从sessionStorage获取
    if (!token) {
      token = sessionStorage.getItem('token');
    }
    
    if (!token) {
      // 不记录具体错误，只记录认证失败
      console.error('认证失败');
      throw new Error('未登录，无法访问管理功能');
    }
    
    // 返回包含两种认证头格式的对象
    return {
      headers: {
        'Authorization': `Bearer ${token}`,
        'x-auth-token': token
      }
    };
  }
  
  /**
   * 处理API错误
   * @param {Error} error - 错误对象
   * @param {string} operation - 操作名称
   */
  handleApiError(error, operation) {
    console.error(`操作失败: ${operation}`);
    
    // 处理401错误
    if (error.response && error.response.status === 401) {
      console.error('认证错误');
      // 清除本地存储的认证信息
      sessionStorage.removeItem('token');
      sessionStorage.removeItem('user');
      
      // 显示错误消息
      ElMessage.error('认证已过期，请重新登录');
      
      // 重定向到登录页
      router.push('/login');
    } else {
      const message = error.response?.data?.message || error.message;
      ElMessage.error(`${operation}失败: ${message}`);
    }
    
    throw error;
  }
  
  /**
   * 获取仪表盘统计数据
   * @returns {Promise} 返回统计数据
   */
  async getDashboardStats() {
    try {
      const authConfig = this.getAuthHeaders();
      
      // 发送请求获取统计数据
      try {
        const response = await axios.get(`${API_URL}/admin/stats`, authConfig);
        return response.data;
      } catch (error) {
        return this.handleApiError(error, '获取仪表盘统计数据');
      }
    } catch (error) {
      return this.handleApiError(error, '准备获取仪表盘统计数据');
    }
  }
  
  /**
   * 获取简化的统计数据 - 直接从不同API获取聚合
   * @returns {Promise} 返回统计数据
   */
  async getSimpleStats() {
    try {
      const authConfig = this.getAuthHeaders();
      
      // 准备返回对象
      const stats = {
        totalPets: 0,
        totalUsers: 0,
        pendingApplications: 0,
        successfulAdoptions: 0
      };
      
      // 并行请求所有统计数据
      const [petsResponse, usersResponse, pendingResponse, approvedResponse] = await Promise.allSettled([
        axios.get(`${API_URL}/pets/count`, authConfig),
        axios.get(`${API_URL}/users/count`, authConfig),
        axios.get(`${API_URL}/adoptions/count?status=pending`, authConfig),
        axios.get(`${API_URL}/adoptions/count?status=approved`, authConfig)
      ]);
      
      // 处理响应
      if (petsResponse.status === 'fulfilled' && petsResponse.value.data) {
        stats.totalPets = petsResponse.value.data.count || 0;
      }
      
      if (usersResponse.status === 'fulfilled' && usersResponse.value.data) {
        stats.totalUsers = usersResponse.value.data.count || 0;
      }
      
      if (pendingResponse.status === 'fulfilled' && pendingResponse.value.data) {
        stats.pendingApplications = pendingResponse.value.data.count || 0;
      }
      
      if (approvedResponse.status === 'fulfilled' && approvedResponse.value.data) {
        stats.successfulAdoptions = approvedResponse.value.data.count || 0;
      }
      
      return stats;
    } catch (error) {
      return this.handleApiError(error, '获取简化统计数据');
    }
  }

  /**
   * 获取申请趋势数据
   * @returns {Promise} 返回最近30天的申请趋势数据
   */
  async getApplicationTrends() {
    try {
      const authConfig = this.getAuthHeaders();
      
      const response = await axios.get(`${API_URL}/adoptions/trends`, authConfig);
      return response.data.applicationTrend;
    } catch (error) {
      return this.handleApiError(error, '获取申请趋势数据');
    }
  }
}

export default new AdminService(); 